package com.simple.util.file;

import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

/**
 * @program: simple_tools
 * @description: 文件工具类
 * @author: ChenWenLong
 * @create: 2019-11-18 11:46
 **/
public class FileUtils {

    //文件名称集合
    public static List<String> fileList = new ArrayList<>();

    /**
     * 功能描述:
     * 〈递归获取文件名称〉
     *
     * @params : [inputFile]
     * @return : void
     * @author : cwl
     * @date : 2019/11/18 14:05
     */
    public static void fileRecursion(File inputFile){
        File[] files = inputFile.listFiles();
        for (File file : files) {
            if(file.isDirectory()){
                fileRecursion(file);
            }
            fileList.add(file.getName());
        }
    }

    /**
     * 功能描述:
     * 〈获取文件的绝对路径〉
     *
     * @params : [fileName]
     * @return : java.net.URL
     * @author : cwl
     * @date : 2019/12/31 10:07
     */
    public URL getDefaultFile(String fileName){
       return this.getClass().getClassLoader().getResource(fileName);
    }

    /**
     * 功能描述:
     * 〈获取文件的相对路径〉
     *
     * @params : [baseDir, file]
     * @return : java.lang.String
     * @author : cwl
     * @date : 2019/12/31 10:08
     */
    public static String getRelativePath(File baseDir,File file) {
        if(baseDir.equals(file))
            return "";
        if(baseDir.getParentFile() == null)
            return file.getAbsolutePath().substring(baseDir.getAbsolutePath().length());
        return file.getAbsolutePath().substring(baseDir.getAbsolutePath().length()+1);
    }

    /**
     * 功能描述:
     * 〈查询某个目录下的所有文件〉
     *
     * @params : [dir]
     * @return : java.util.List<java.io.File>
     * @author : cwl
     * @date : 2019/12/31 10:08
     */
    public static List<File> searchAllFile(File dir) {
        ArrayList arrayList = new ArrayList();
        searchFiles(dir,arrayList);
        return arrayList;
    }

    /**
     * 功能描述:
     * 〈递归获取某个目录下的所有文件〉
     *
     * @params : [dir, collector]
     * @return : void
     * @author : cwl
     * @date : 2019/12/31 10:08
     */
    public static void searchFiles(File dir,List<File> collector) {
        if(dir.isDirectory()) {
            File[] subFiles = dir.listFiles();
            for(int i = 0; i < subFiles.length; i++) {
                searchFiles(subFiles[i],collector);
            }
        }else{
            collector.add(dir);
        }
    }

    /**
     * 功能描述:
     * 〈创建文件〉
     *
     * @params : [dir, file]
     * @return : java.io.File
     * @author : cwl
     * @date : 2019/12/31 10:08
     */
    public static File mkdir(String dir,String file) {
        if(dir == null) throw new IllegalArgumentException("dir must be not null");
        File result = new File(dir,file);
        if(result.getParentFile() != null) {
            result.getParentFile().mkdirs();
        }
        return result;
    }
}
